package com.kxr.literetrofit.network.subscriber;

import android.util.Log;

import com.kxr.literetrofit.network.translator.IDataTranslator;

import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import okhttp3.ResponseBody;

/**
 * Created by kongxr on 2019/3/12.
 * 数据观察者（数据初步处理）
 * 使用自定义数据格式转换器
 * 当服务器返回数据格式非XindunResponse<T>时使用此回调
 */
public abstract class CustomObserver<T> implements Observer<ResponseBody> {

    private IDataTranslator<T> translator;

    //如果不对数据进行处理，直接返回原始数据，则使用无参构造，此时传入泛型T必须为ResponseBody
    protected CustomObserver() {}

    /**
     * 如果需要转化数据格式，则使用带参构造
     * @param translator 自定义转换类
     */
    protected CustomObserver(IDataTranslator<T> translator) {
        this.translator = translator;
    }

    @Override
    public void onSubscribe(Disposable d) {

    }

    //一般情况下不要复写此方法，使用onSuccess获取结果
    @Override
    public void onNext(ResponseBody responseBody) {
        Log.d("OkHttp","responseBody==="+responseBody.contentLength()+"  "+responseBody.contentType());
        // 默认不处理，直接返回原始数据
        if (translator == null){
            onSuccess((T)responseBody);
        }else {
            T result;
            try {
                result = translator.translate(responseBody);
            } catch (Exception e) {
                e.printStackTrace();
                onError(e);
                return;
            }
            onSuccess(result);
        }
    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onComplete() {

    }

    //复写此方法获取请求结果
    protected abstract void onSuccess(T data);
}
